home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Memphis Amiga Group / MAG Virus Utilities (1991-10)(Memphis Amiga Group).zip / MAG Virus Utilities (1991-10)(Memphis Amiga Group).adf / Berserker5.01 / Berserker.s < prev    next >
Text File  |  1991-09-06  |  45KB  |  1,971 lines

  1. ;==============================================================================
  2. ;
  3. ;                          B E R S E R K E R  5.02
  4. ;                          +++++++++++++++++++++++
  5. ;
  6. ;               © Copyright 1988, 1989, 1990 by Ralf Thanner
  7. ;
  8. ;   The code is entirely written in assembler for the Kuma Seka assembler
  9. ;
  10. ;===============================  BERSERKER  ==================================
  11. ;
  12. ; IMPORTANT  NOTICE:   This program is (c) Copyright by Ralf Thanner, but can
  13. ; be FREELY DISTRIBUTED, providing that the following rules are respected.
  14. ;
  15. ;  - No change is made to the program nor to the accompaning documentation.
  16. ;
  17. ;  - Every  form  of distribution is allowed and encouraged, but no fee can
  18. ;    be charged for this program except for, possibly, the cost of magnetic
  19. ;    media.
  20. ;
  21. ;  - The package is always distributed in its complete form consisting of 4
  22. ;    files:     'BERSERKER',   'BERSERKER-HANDLER',   'BERSERKER.Doc'   and
  23. ;    'BERSERKER.S'.
  24. ;
  25. ; By  copying,  distributing  and/or using the program you indicate your
  26. ; acceptance of the above rules.
  27. ;
  28. ;==============================================================================
  29. ;
  30. ;
  31. ;       V5.02    - again fine tuning.
  32. ;          CLI PARAMETER CHECK recognizes now TAB's.
  33. ;
  34. ;        - new handler version -> V1.5
  35. ;
  36. ;=============================================================================
  37. forbid        EQU    -132    ;     Exec.library
  38. permit        EQU    -138
  39. allocmem    EQU    -198
  40. freemem        EQU    -210
  41. availmem    EQU    -216
  42. findname    EQU    -276
  43. addtask        EQU    -282
  44. findtask    EQU    -294
  45. settaskpri    EQU    -300
  46. getmsg        EQU    -372
  47. replymsg    EQU    -378
  48. waitport    EQU    -384
  49. findport    EQU    -390
  50. closelib    EQU    -414
  51. openresource    EQU    -498
  52. openlib        EQU    -552
  53. open        EQU    -30    ;    Dos.library
  54. close        EQU    -36
  55. read        EQU    -42
  56. write        EQU    -48
  57. output        EQU    -60
  58. seek        EQU    -66
  59. delete        EQU    -72
  60. loadseg        EQU    -150
  61. unloadseg    EQU    -156
  62. delay        EQU    -198
  63. mode_old    EQU    1005
  64. mode_new    EQU    1006
  65. clearmenustrip    EQU    -54    ;    Intuition.library
  66. closwindow    EQU    -72
  67. dispalert    EQU    -90
  68. drawborder    EQU    -108
  69. openwindow    EQU    -204
  70. printitext    EQU    -216
  71. setwindowtitles    EQU    -276
  72. ;=============================================================================
  73. NULL        EQU     $00000000    ;    FLAGS USED BY POWERWINDOW
  74. MENUNULL    EQU     $00000000
  75. WBENCHSCREEN    EQU    $00000001
  76. CUSTOMSCREEN    EQU    $0000000f
  77. MENUENABLED    EQU    $00000001
  78. MIDRAWN        EQU    $00000100
  79. SIZEVERIFY    EQU    $00000001    ;    IDCMP - FLAGS
  80. NEWSIZE        EQU    $00000002
  81. REFRESHWINDOW    EQU    $00000004
  82. MOUSEBUTTONS    EQU    $00000008
  83. MOUSEMOVE    EQU    $00000010
  84. GADGETDOWN    EQU    $00000020
  85. GADGETUP    EQU    $00000040
  86. REQSET        EQU    $00000080
  87. MENUPICK    EQU    $00000100
  88. CLOSEWINDOW    EQU    $00000200
  89. RAWKEY        EQU    $00000400
  90. REQVERIFY    EQU    $00000800
  91. REQCLEAR    EQU    $00001000
  92. MENUVERIFY    EQU    $00002000
  93. NEWPREFS    EQU    $00004000
  94. DISKINSERTED    EQU    $00008000
  95. DISKREMOVED    EQU    $00010000
  96. WBENCHMESSAGE    EQU    $00020000
  97. ACTIVEWINDOW    EQU    $00040000
  98. INACTIVEWINDOW    EQU    $00080000
  99. DELTAMOVE    EQU    $00100000
  100. VANILLAKEY    EQU    $00200000
  101. INTUITICKS    EQU    $00400000
  102. LONELYMESSAGE    EQU    $80000000
  103. WINDOWSIZING    EQU    $00000001    ;    WINDOW TYPE
  104. WINDOWDRAG    EQU    $00000002
  105. WINDOWDEPTH    EQU    $00000004
  106. WINDOWCLOSE    EQU    $00000008
  107. SIZEBRIGHT    EQU    $00000010
  108. SIZEBOTTOM    EQU    $00000020
  109. SMART_REFRESH    EQU    $00000000
  110. SIMPLE_REFRESH    EQU    $00000040
  111. SUPER_BITMAP    EQU    $00000080
  112. BACKDROP    EQU    $00000100
  113. REPORTMOUSE    EQU    $00000200
  114. GIMMEZEROZERO    EQU    $00000400
  115. BORDERLESS    EQU    $00000800
  116. ACTIVATE    EQU    $00001000
  117. WINDOWACTIVE    EQU    $00002000
  118. INREQUEST    EQU    $00004000
  119. MENUSTATE    EQU    $00008000
  120. RMBTRAP        EQU    $00010000
  121. NOCAREREFRESH    EQU    $00020000
  122. WINDOWREFRESH    EQU    $01000000
  123. WINDOWTICKED    EQU    $04000000
  124. WBENCHWINDOW    EQU    $02000000
  125. RP_JAM1        EQU    $00000000    ;     TEXTMODI
  126. RP_JAM2        EQU    $00000001
  127. RP_COMPLEMENT    EQU    $00000002
  128. RP_INVERSIZED    EQU    $00000004
  129. HIGHIMAGE    EQU    $00000000    ;    MENU ITEM
  130. CHECKIT        EQU    $00000001
  131. ITEMTEXT    EQU    $00000002
  132. COMMSEQ        EQU    $00000004
  133. MENUTOGGLE    EQU    $00000008
  134. ITEMENABLED    EQU    $00000010
  135. HIGHCOMP    EQU    $00000040
  136. HIGHBOX        EQU    $00000080
  137. HIGHNONE    EQU    $000000C0
  138. CHECKED        EQU    $00000100
  139. BOOLGADGET    EQU    $00000001    ; GADGET TYPE
  140. GADGET0002    EQU    $00000002
  141. PROPGADGET    EQU    $00000003
  142. STRGADGET    EQU    $00000004
  143. SIZING        EQU    $00000010    ; SYSTEM GADGETS
  144. WDRAGGING    EQU    $00000020
  145. SDRAGGING    EQU    $00000030
  146. WUPFRONT    EQU    $00000040
  147. SUPFRONT    EQU    $00000050
  148. WDOWNBACK    EQU    $00000060
  149. SDOWNBACK    EQU    $00000070
  150. gCLOSE        EQU    $00000080
  151. REQGADGET    EQU    $00001000    ; TYPES
  152. GZZGADGET    EQU    $00002000
  153. SCRGADGET    EQU    $00004000
  154. SYSGADGET    EQU    $00008000
  155. GADGHCOMP    EQU    $00000000    ; HIGHLIGHT TECHNIQUE
  156. GADGHBOX    EQU    $00000001
  157. GADGHIMAGE    EQU    $00000002
  158. GADHHNONE    EQU    $00000003
  159. GADGHIGHBITS    EQU    $00000003
  160. GADIMAGE    EQU    $00000004
  161. GRELBOTTOM    EQU    $00000008    ; LEFT & TOP COORDINATES
  162. GRELRIGHT    EQU    $00000010
  163. GRELWIDHT    EQU    $00000020
  164. RELVERIFY    EQU    $00000001    ; GADGET ACTIVATION FLAGS
  165. GADGIMMEDIATE    EQU    $00000002
  166. ENDGADGET    EQU    $00000004
  167. FOLLOWMOUSE    EQU    $00000008
  168. RIGHTBORDER    EQU    $00000010
  169. LEFTBORDER    EQU    $00000020
  170. TOPBORDER    EQU    $00000040
  171. BOTTOMBORDER    EQU    $00000080
  172. TOGGLESELECT    EQU    $00000100
  173. STRINGCENTER    EQU    $00000200
  174. STRINGRIGHT    EQU    $00000400
  175. LONGINT        EQU    $00000800
  176. ALTKEYMAP    EQU    $00001000
  177. ;=============================================================================
  178.  
  179. POWERUP
  180.     movem.l        d0-d7/a0-a6,-(a7)
  181.  
  182.     LEA        VAR(PC),A5
  183.     move.l        $04.w,a6
  184.     suba.l        a1,a1
  185.     jsr    findtask(a6)
  186.     move.l        d0,a4
  187.     move.l        d0,mytask-VAR(A5)
  188.     tst.l        $ac(a4)
  189.     bne.s    cli_call
  190.     lea        $5c(a4),a0
  191.     jsr    waitport(a6)
  192.     lea        $5c(a4),a0
  193.     jsr    getmsg(a6)
  194.     move.l        d0,message-var(a5)
  195.     not.b        launch-var(a5)
  196.     movem.l     (a7)+,d0-d7/a0-a6
  197.     LEA        VAR(PC),A5
  198.     bra.L    workbench
  199.  
  200. * CLI-PARAMETER HANDLER
  201.  
  202. cli_call
  203.     movem.l     (a7)+,d0-d7/a0-a6
  204.     LEA        VAR(PC),A5
  205.     subq        #1,d0
  206.     beq.s    no_cli_parameter
  207. which_parameter
  208.     cmp.b        #$20,(a0)+
  209.     bne.s    parameter_found
  210.     dbra        d0,which_parameter
  211.     bra.s    no_cli_parameter
  212. parameter_found
  213.     move.b        -(a0),d1    
  214.     cmp.b        #$09,d1
  215.     beq.s    TAB
  216.     cmp.b        #'?',d1
  217.     beq.L    instructions
  218.     cmp.b        #'C',d1
  219.     beq.s    no_cold
  220.     cmp.b        #'c',d1
  221.     beq.s    no_cold
  222.     cmp.b        #'I',d1
  223.     beq.s    install_it
  224.     cmp.b        #'i',d1
  225.     beq.s    install_it
  226.     cmp.b        #'R',d1
  227.     beq.s    remove_it
  228.     cmp.b        #'r',d1
  229.     beq.s    remove_it
  230.     bne.s    no_cli_parameter
  231. TAB
  232.     addq.l        #1,a0
  233.     bra.s    which_parameter
  234. no_cold
  235.     addq.l        #1,a0
  236.     not.b        no_killy-VAR(a5)
  237.     bra.s    which_parameter
  238. install_it
  239.     addq.l        #1,a0
  240.     not.b        launcher-VAR(a5)
  241.     bra.s    which_parameter
  242. remove_it
  243.     addq.l        #1,a0
  244.     not.b        remover-VAR(a5) 
  245.     bra.s    which_parameter
  246.  
  247. no_cli_parameter
  248.  
  249.     move.l        $04.w,a6
  250.     jsr    FORBID(a6)        ; forbid all tasks
  251.  
  252.     bsr.L    open_libs
  253.     bsr.L    test_lib
  254.     bsr.L    open_output
  255.  
  256.     tst.w        kickflag-VAR(a5)
  257.     bne.s    wrong_kick
  258.     bsr.L    kill_viruses
  259.  
  260.     tst.b        virusflag-VAR(a5)
  261.     bne.s    exit4            ; Lucky ones...
  262.     move.l        #mes0,d2
  263.     move.l        #mes0length,d3
  264.      bsr.L    writer
  265.     bra.s    exit3
  266.  
  267. exit4:    bsr.L    alert            ; Virus found
  268.  
  269. exit3:    tst.b        launcher-VAR(a5)
  270.     beq.s    exit6
  271.     bsr.L    loader
  272.     bra.s    exit7
  273. exit6:    tst.b        remover-VAR(a5)
  274.     beq.s    exit7
  275.     bsr.L    un_load
  276. exit7:    move.l        $04.w,a6
  277.     jsr     PERMIT(a6)        ; Allow other tasks
  278. exit5:    bsr.L    close_libs
  279.     moveq        #00,d0
  280.     rts
  281.  
  282. wrong_kick
  283.     move.l        #mes17,d2
  284.     move.l        #mes17length,d3
  285.      bsr.L    writer
  286.     bra.s    exit3
  287.  
  288. exit_workbench
  289.     bsr.L    close_libs
  290.     move.l        $04.w,a6
  291.     jsr    forbid(a6)
  292.     move.l        message(pc),a1
  293.     jsr    replymsg(a6)
  294.     moveq        #00,d0        ; For clear entry into CLI
  295.     rts                ; Back to CLI...
  296.  
  297. ************************* SUB ROUTINES *********************************
  298.  
  299. WORKBENCH
  300.     bsr.L    open_libs
  301.     bsr.L    test_lib
  302.     bsr.L    INIT
  303.  
  304. WORK:    bsr.L    wait_port_get_msg_reply_msg_auswertung_msg
  305.     tst.b        leave_it-VAR(a5)    ; window close
  306.     bne.s    work_leave1
  307.     move.l        dosbase(pc),a6
  308.     move.l        #$0a,d1
  309.     jsr    delay(a6)        
  310.     bra.s    work    
  311. work_leave1
  312.     move.l        intbase(pc),a6
  313.     move.l        windowhandle(pc),a0
  314.     jsr    closwindow(a6)
  315.  
  316.     bra.l    exit_workbench
  317.  
  318. wait_port_get_msg_reply_msg_auswertung_msg
  319.     move.l        $04.w,a6
  320.     move.l        userport(pc),a0
  321.     jsr    waitport(a6)
  322.     move.l         userport(pc),a0
  323.     jsr    getmsg(a6)
  324.     move.l        d0,a0
  325.     add.l        #$14,a0
  326.     lea        message_list(pc),a1
  327.     move.l        (a0)+,(a1)+
  328.     move.l        (a0)+,(a1)+
  329.     move.l        (a0)+,(a1)+
  330.     move.l        d0,a1
  331.     jsr    replymsg(a6)
  332.     lea         message_list(pc),a0
  333.     move.l        (a0)+,d0
  334.     cmp.w        #$200,d0    ; closewindow
  335.     beq.s    message_auswertung2
  336.     cmp.w        #$40,d0        ; gadup
  337.     beq.s    message_auswertung1
  338.     rts
  339. message_auswertung2
  340.     not.b    leave_it-VAR(A5)
  341.     rts
  342. message_auswertung1
  343.     addq        #4,a0
  344.     move.l        (a0),a1
  345.  
  346. gad_auswertung
  347.     lea        gad_table(pc),a0
  348.     moveq        #0,d0
  349. gad_auswertung0
  350.     cmp.l        (a0)+,a1
  351.     beq.s    main_auswertung
  352.     addq        #1,d0
  353.     bra.s    gad_auswertung0
  354.  
  355. main_auswertung
  356.     tst.w        d0
  357.     beq.s    kill_em
  358.     cmp.w        #1,d0
  359.     beq.L    loader
  360.     cmp.w        #2,d0
  361.     beq.L    un_load
  362.     cmp.w        #3,d0
  363.     beq.L    workbench_instructions
  364.     not.b    leave_it-VAR(A5)
  365.     rts
  366.  
  367. kill_em
  368.     move.l        $04.w,a6
  369.     jsr    forbid(a6)
  370.     tst.w        kickflag-VAR(a5)
  371.     bne.s    kill_em2
  372.     bsr.L    kill_viruses
  373.     tst.b        virusflag-VAR(a5)
  374.     beq.s    kill_em1
  375.  
  376.     bsr.L    alert
  377.     clr.b        virusflag-VAR(a5)
  378.     bra.s    kill_em2
  379. kill_em1
  380.     lea        Itext11(pc),a0
  381.     bsr.L    write_text
  382. kill_em2
  383.     move.l        $04.w,a6
  384.     jsr     permit(a6)        ; Allow it all
  385.     rts
  386.  
  387.  
  388. * from WORKBENCH it's 'left mouse' & from CLI it's 'RETURN'
  389.  
  390. workbench_instructions
  391.     bsr.L    open_con
  392.     bsr.L    instructions0
  393.     move.l        #mes215,d2        ; press mouse
  394.     move.l        #mes215length,d3
  395.     bsr.L    writer
  396.     bsr.L    right_mouse_button        ; mit delay
  397.     bsr.L    close_con
  398.     rts
  399. instructions
  400.     bsr.L    test_pal
  401.     bsr.L    open_libs
  402.     bsr.L    open_output
  403.     tst.w        pal-VAR(a5)
  404.     bne.s    instructions2
  405.     move.l        #mes15,d2    ; Prints out the instructions
  406.     move.l        #mes15length,d3
  407.     bsr.L    writer
  408.     bra.L    exit5
  409. instructions2
  410.     bsr.s    instructions0
  411.     bra.L    exit5
  412.  
  413. instructions0
  414.     move.l        #mes15,d2        ; first part
  415.     move.l        #mes115length,d3
  416.     bsr.L    writer
  417.     tst.b    launch
  418.     bne.s    instructions01            ; workbench-> mouse
  419.     move.l        #mes415,d2        ; press return
  420.     move.l        #mes415length,d3
  421.     bsr.L    writer
  422.     bsr.L    read_con
  423.     bra.s    instructions02
  424. instructions01
  425.     move.l        #mes215,d2        ; press mouse
  426.     move.l        #mes215length,d3
  427.     bsr.L    writer
  428.     bsr.L    right_mouse_button
  429. instructions02
  430.     move.l        #con_error,d2        ; clear it
  431.     move.l        #con_clear-con_error,d3
  432.     bsr.L    writer
  433.     move.l        #mes115end,d2        ; second part
  434.     move.l        #mes315length,d3
  435.     bra.L    writer
  436.  
  437.  
  438. un_load
  439.     move.l        $04.w,a6
  440.     lea        task_name(pc),a1
  441.     jsr    findtask(a6)
  442.     tst.l        d0
  443.     beq.s    nix_un_load
  444.     move.l        d0,a0
  445.     jsr    $5c(a0)            ; EXIT-TC
  446.     move.l        dosbase(pc),a6
  447.     jsr    unloadseg(a6)
  448.     tst.l        message-VAR(a5)        ; workbench start
  449.     bne.s    un_load1            ; nix dos-write
  450.     move.l        #mes21,d2
  451.     move.l        #mes21length,d3
  452.      bra.L    short_writer
  453. un_load1
  454.     lea        mes21(pc),a0
  455.     bra.L    write_text
  456.  
  457. nix_un_load
  458.     tst.l        message-VAR(a5)
  459.     bne.s    nix_un_load1
  460.     move.l        #mes20,d2
  461.     move.l        #mes20length,d3
  462.      bra.L    short_writer
  463. nix_un_load1
  464.     lea        mes20(pc),a0
  465.     bra.L    write_text
  466. loader
  467.     move.l        $04.w,a6
  468.     lea        task_name(pc),a1
  469.     jsr    findtask(a6)
  470.     tst.l        d0
  471.     bne.s    nix_load
  472.  
  473.     move.l        dosbase(pc),a6
  474.  
  475.     lea        name(pc),a0
  476.     move.l        a0,d1
  477.     jsr    loadseg(a6)
  478.     tst.l        d0
  479.     beq.L    loader_error
  480.     move.l        d0,d1
  481.     add.l        d0,d0
  482.     add.l        d0,d0
  483.     addq.l        #4,d0
  484.     move.l        d0,a4
  485.  
  486.     move.l        $04.w,A6
  487.     move.l        dosbase(pc),a0
  488.     move.l        d1,a1
  489.     move.l        intbase(pc),a2
  490.     move.l        trackdisk(pc),a3
  491.     jsr    $5a(a4)    
  492.  
  493.     tst.b        launch-VAR(a5)
  494.     bne.s    loader1
  495.  
  496.     move.l        #mes22,d2
  497.     move.l        #mes22length,d3
  498.      bra.L    short_writer
  499. loader1
  500.     lea        mes22(pc),a0
  501.     bra.L    write_text
  502.  
  503. nix_load
  504.     tst.b        launch-VAR(a5)
  505.     bne.s    nix_load1
  506.     move.l        #mes23,d2
  507.     move.l        #mes23length,d3
  508.      bra.L    short_writer
  509. nix_load1
  510.     lea        mes23(pc),a0
  511.     bra.L    write_text
  512. loader_error
  513.     tst.b        launch-VAR(a5)
  514.     bne.s    loader_error1
  515.     move.l        #mes19,d2
  516.     move.l        #mes19length,d3
  517.      bra.L    writer
  518. loader_error1
  519.     lea        mes25(pc),a0
  520.     bra.s    write_text
  521.  
  522. *****************************************************************************
  523. INIT
  524.     moveq        #-3,d0
  525. set_task_pri
  526.     move.l        mytask(pc),a1
  527.     move.b        d0,newtaskpri-VAR(A5)
  528.     jsr    settaskpri(a6)
  529. open_window
  530.     move.l        intbase(pc),a6
  531.     lea        NewWindowStructure1(pc),a0
  532.     jsr    openwindow(a6)
  533.     move.l        d0,windowhandle-VAR(A5)
  534.     move.l        d0,a0
  535. get_my_port
  536.     move.l        86(a0),userport-VAR(A5)
  537.     move.l        50(a0),my_rastport-VAR(A5)
  538. draw_border
  539.     lea        border(pc),a1
  540.     move.l        my_rastport(pc),a0
  541.     move.w        #2,d0
  542.     move.w        #110,d1
  543.     jmp    drawborder(a6)
  544. test_lib
  545.     move.l        dosbase(pc),a0
  546.     move.w        $14(a0),d1
  547.     cmp.w        #35,d1            ; darf nicht OS 2.0 sein
  548.     ble.s    yo_lib
  549.     not.w        kickflag-VAR(a5)
  550. yo_lib:    rts
  551.  
  552. write_text
  553.     lea        IntText(pc),a1
  554.     move.l        a0,12(a1)
  555.     move.l        intbase(pc),a6
  556.     move.l        my_rastport(pc),a0
  557.     moveq        #0,d0
  558.     moveq        #0,d1
  559.     jmp    printitext(a6)
  560. open_output
  561.     move.l        Dosbase(pc),a6
  562.     jsr    output(a6)
  563.     move.l        d0,handle-VAR(a5)
  564.     rts
  565. open_con
  566.     move.l        Dosbase(pc),a6
  567.     move.l        #con,d1
  568.     move.l        #mode_old,d2
  569.     jsr    open(a6)
  570.     LEA        VAR(pc),A5
  571.     move.l        d0,handle-VAR(a5)
  572.     rts
  573. close_con
  574.     move.l        Dosbase(pc),a6
  575.     move.l        handle-VAR(a5),d1
  576.     jmp    close(a6)
  577. test_pal
  578.     move.l        $04.w,a6
  579.     cmp.b        #$32,530(a6)
  580.     beq.s    test_pal1
  581.     not.w        pal-VAR(a5)
  582. test_pal1
  583.     rts
  584. writer:    move.l        Dosbase(pc),a6
  585.     move.l        handle(pc),d1
  586.     jmp    write(a6)
  587.  
  588. short_writer                ; to avoid two messages in memory..
  589.     move.l        Dosbase(pc),a6
  590.     move.l        handle(pc),d1
  591.     jsr    write(a6)
  592.     move.l        handle(pc),d1
  593.     move.l        #mes24,d2
  594.     move.l        #mes24length,d3
  595.     jmp    write(a6)
  596.  
  597. writer1:move.l        Dosbase(pc),a6
  598.     move.l        handle(pc),d1
  599.     jsr    write(a6)
  600.     move.l        handle(pc),d1
  601.     move.l        #mes,d2
  602.     move.l        #meslength,d3
  603.     jmp    write(a6)
  604.  
  605. alert:    lea        alert1(pc),a0
  606. calert:    move.l        Intbase(pc),a6
  607.      moveq        #00,d0        ; Recovery Alert
  608.      move.l         #28,d1
  609.      jmp     dispalert(a6)
  610.  
  611. killcold_cool
  612.     tst.b        no_killy-VAR(a5)
  613.     bne.s    kcc3
  614.     move.l        $04.w,a6
  615.     clr.l        46(a6)    ; cool-capture normal
  616.     clr.l        42(a6)    ; cold-capture normal
  617.     clr.l        50(a6)
  618.     lea        34(a6),a0    ; New execbase checksum
  619.     moveq        #0,d0
  620.     moveq        #$17,d1
  621. kcc1:    add.w        (a0)+,d0
  622.     dbf    d1,kcc1
  623.     not.w        d0
  624.     move.w        d0,(a0)
  625. kcc3:    rts
  626.  
  627. tracker
  628.     move.l        $04.w,a6
  629.     lea        350(a6),a0
  630.     lea        Trddevice(pc),a1    ; Searches
  631.     jsr    findname(a6)            ; for trackdisk.device
  632.     move.l        d0,a0
  633.     sub.l        #28,a0            ; that's the most used
  634.     move.l        a0,trackdisk-VAR(a5)
  635.     rts                    ; pointer in trd.dev...
  636.  
  637. filler:    lea        $400(a0),a1
  638. fill1:    clr.l        (a0)+
  639.     cmpa.l        a0,a1
  640.     bge.s    fill1
  641.     rts
  642.  
  643. clear_kicktag
  644.     move.l      $04.w,a6
  645.     clr.l        554(a6)        ; Kickchecksum
  646.     clr.l        550(a6)        ; Kicktagptr
  647.     clr.l        546(a6)        ; Kickmemptr
  648.     rts
  649.  
  650. open_libs
  651.     move.l        $04.w,a6
  652.     lea.l        Dosname(pc),a1
  653.     bsr.s        open_libs1
  654.     move.l        d0,dosbase-VAR(a5)
  655.  
  656.     lea.l        expname(pc),a1    ; expansion
  657.     bsr.s        open_libs1
  658.     move.l        d0,expbase-VAR(a5)
  659.  
  660.     lea.l        Intname(pc),a1
  661.     bsr.s        open_libs1
  662.     move.l         d0,IntBase-VAR(a5)
  663.  
  664.     lea.l        layname(pc),a1
  665.     bsr.s        open_libs1
  666.     move.l        d0,laybase-VAR(a5)
  667.  
  668.     lea.l        gfxname(pc),a1
  669.     bsr.s        open_libs1
  670.     move.l         d0,gfxBase-VAR(a5)
  671.     rts
  672. open_libs1
  673.     moveq        #$21,d0
  674.     jmp    openlib(a6)
  675.  
  676. close_libs
  677.     move.l        $04.w,a6
  678.     move.l        dosbase(pc),a1
  679.     bsr    close_libs2
  680.     move.l         IntBase(pc),a1
  681.     bsr    close_libs2
  682.     move.l        gfxbase(pc),a1
  683.     bsr    close_libs2
  684.     move.l        laybase(pc),a1
  685.     bsr    close_libs2
  686.     move.l         expBase(pc),a1
  687.     bsr    close_libs2
  688.     rts
  689. close_libs2
  690.     jmp     closelib(a6)
  691.  
  692. right_mouse_button
  693.     move.l        dosbase(pc),a6
  694. right_mouse_button1
  695.     move.l        #$0a,d1
  696.     jsr        delay(a6)
  697.     btst        #10,$dff016
  698.     bne.s        right_mouse_button1
  699.     rts
  700.  
  701. read_con
  702.     clr.w        input_buffer-VAR(A5)
  703.     move.l        dosbase(pc),a6
  704.     move.l        handle(pc),d1
  705.     move.l        #input_buffer,d2
  706.     move.l        #2,d3    ; nur ein zeichen
  707.     jsr        read(a6)
  708.     move.b        input_buffer-VAR(a5),d0
  709.     cmp.b        #$0a,d0                ; wenn ich RETURN
  710.     bne.s    read_con                ; schreibe, meine
  711.     rts                        ; ich es auch so..
  712.  
  713. ********************  L I B  C H E C K E R  *****************************
  714.  
  715. lib_checker
  716.     lea        layname(pc),a2
  717.     move.l        laybase-VAR(a5),a0
  718.     bsr.s    lib_check
  719.     lea        expname(pc),a2
  720.     move.l        expbase-VAR(a5),a0
  721.     bsr.s    lib_check
  722.     lea        gfxname(pc),a2
  723.     move.l        gfxbase-VAR(a5),a0
  724.     bsr.s    lib_check
  725.     lea        intname(pc),a2
  726.     move.l        intbase-VAR(a5),a0
  727.     bsr.s    lib_check
  728.     lea        exename(pc),a2
  729.     move.l        $04.w,a0    ; execbase
  730.     bra.s    lib_check
  731. lib_check
  732.     cmp.l        #0,a0
  733.     beq.s    lib_check_ende
  734.     moveq        #0,d0
  735.     moveq        #0,d1
  736.     moveq        #0,d2
  737.     move.l        a0,a1
  738.     move.w        $10(a1),d0    ; laenge vor knoten
  739.     move.w        $1c(a1),d2    ; checksum    
  740.     lsr.w        #1,d0        ; for dbf
  741.     bra.s    lib_check2
  742. lib_check1
  743.     add.w        -(a0),d1
  744. lib_check2
  745.     dbf    d0,lib_check1
  746.     cmp.w        d1,d2
  747.     beq.s    lib_check_ende
  748.     bsr.s    lib_checker_alert
  749. lib_check_ende
  750.     rts
  751.  
  752. lib_checker_alert
  753.     lea        alert4(pc),a0
  754. lib_checker_alert1
  755.     move.b        (a2)+,(a0)+
  756.     bne.s    lib_checker_alert1
  757.     move.b        #$20,-(a0)
  758.     lea        alert3(pc),a0
  759.     bra.L    calert
  760. **************************************************************************
  761. kill_viruses
  762.     lea        VAR(pc),a5
  763.     bsr.L    jack            ; The Traveling JACK
  764.     bsr.L    centurion
  765.     bsr.l    disaster_master
  766.     bsr.L    Xeno            ; XENO - Link
  767.     bsr.L    revenge            ; REVENGE (old one)    
  768.     bsr.L    revenge_boot        ; REVENGE - BOOTLOADER
  769.     bsr.L    gadaffi            ; Gadaffi
  770.     bsr.L    disk_doctor        ; Disk Doctor
  771.     bsr.L    sca            ; Checks for SCA & mutants
  772.     bsr.L    dasa            ; Checks for Byte Warrior
  773.     bsr.L    irq            ; Link
  774.     bsr.L    bsg            ; Link
  775.     bsr.L    exterminator
  776.     bsr.L    bytebandit
  777.     bsr.L    killcold_cool
  778.     bsr.L    lib_checker
  779.     rts            
  780. ******************* V I R U S  K I L L I N G  P A R T ********************
  781. jack:    ; improved to find also the mutant version
  782.     move.l        dosbase(pc),a0    
  783.     move.l        46(a0),a1    ; pointer to jack
  784.  
  785.     move.l        (a1)+,d0
  786.     cmp.l        #$48e7fffe,d0
  787.     bne.s    no_jack
  788.     addq.l        #4,a1    
  789.     move.l        (a1),d0
  790.     cmp.l        #$0c000001,d0
  791.     bne.s    no_jack            ; no jack anymore  he he
  792.     move.l        #$4e714e71,(a1)+
  793.     move.w        #$4e71,(a1)
  794.     move.b        #1,virusflag-VAR(A5)
  795.     tst.b        launch-VAR(a5)
  796.     bne.s    jack1
  797.     move.l        #mes18,d2
  798.     move.l        #mes18length,d3
  799.     bra.L    writer1
  800. no_jack:rts
  801. jack1
  802.     lea        vir0(pc),a0
  803.     bra.L    write_text
  804.  
  805. ***************************************************************************
  806. *    The Traveling JACK
  807. *
  808. *    you can wipe him out with a reset..
  809. *    he changes the dos.lib jump tab.. 
  810. *    (meine hochachtung fuer die routinen, hat richtig spass gemacht)
  811. *    he tries to infect a file..
  812. *    when he is installed, he tries to write his 'VIRUS.xx' file to
  813. *    the disk. each time a programm access the drive he write his
  814. *    stupid text.
  815. ***************************************************************************
  816. centurion:
  817.     move.l        $04.w,a6
  818.     move.l        550(a6),d0
  819.     beq.s    cen_exit
  820.     move.l        d0,a0
  821.     move.l        30(a0),a1
  822.     lea        cen(pc),a0
  823.     moveq        #3,d0
  824. cen1:    cmpm.l        (a0)+,(a1)+        ; the first four longs
  825.     dbne        d0,cen1            ; of his code..
  826.     tst.w        d0
  827.     bpl.s    cen_exit
  828.     move.l        -610(a6),a0    
  829.     cmp.l        #$7f0fe,a0
  830.     bne.s    cen_exit
  831.     lea        $7fdf0,a0        ; is his save back
  832.     move.l        (a0),-610(a6)        ; pointer..
  833.     bsr.L    tracker
  834.     lea        $7fdf4,a1        ; restore
  835.     move.l        (a1),(a0)        ; trackdisk.device
  836.     bsr.L    clear_kicktag            ; throw resident out
  837.     lea        $7f000,a0
  838.     bsr.L    filler                ; clears memory
  839.     bsr.L    filler                ; clears memory part2
  840.     bsr.L    filler                ; clears memory part3
  841.     move.b        #1,virusflag-VAR(A5)
  842.     tst.b        launch-VAR(a5)
  843.     bne.s    cen11
  844.     move.l        #mes16,d2
  845.     move.l        #mes16length,d3
  846.     bra.L    writer1
  847. cen_exit:
  848.     rts
  849. cen11
  850.     lea        vir1(pc),a0
  851.     bra.L    write_text
  852.     
  853. cen:    dc.l    $4eaeff88,$60b241fa
  854.     dc.l    $0d00202e,$02266712
  855. **************************************************************************
  856. *
  857. *    CENTURION - LINK VIRUS
  858. *
  859. *    makes himself resident, changes the DOIO & KICKSUM.
  860. *
  861. *    Virus is 3916 bytes long and tries to infect the programs in
  862. *    the startup-sequence.
  863. *    After XX resets he changes the mousepointer to a smiley with a
  864. *    little scroller.
  865. *
  866. ***************************************************************************
  867. Disaster_Master:
  868.     move.l        $04.w,a6
  869.     move.l        550(a6),d0
  870.     beq.s    disaster_exit
  871.     move.l        d0,a0
  872.     move.l        (a0),a0
  873.     cmp.w        #$4afc,(a0)+    ; isses denn RESIDENT???
  874.     bne.s    disaster_exit
  875.     move.l        (a0)+,a2
  876.     move.l        (a0)+,a1        
  877.     sub.l        a2,a1
  878.     cmpa.l        #$1e,a1        ; is immer seine struct laenge
  879.     bne.s    disaster_exit
  880.     move.l        (a0),d0
  881.     cmp.l        #$01210873,d0    ; sind seine flags
  882.     bne.s    disaster_exit
  883.     add.l        #12,a0    
  884.     move.l        (a0),a0
  885.     move.l        a0,a2        ; backsave
  886.     add.l        #8,a0
  887.     move.l        (a0),d0
  888.     cmp.l        #$011cd7c0,d0    ; teil seines codes    
  889.     bne.s    disaster_exit
  890.     move.w        #$4e75,(a2)    ; castrated    
  891.     move.l        a2,a0
  892.     add.l        #$14a,a0
  893.     move.l        (a0),-454(a6)    ; rauswerfen
  894.     bsr.L    clear_kicktag
  895.     move.b        #1,virusflag-VAR(A5)
  896.     tst.b        launch-VAR(a5)
  897.     bne.s    disaster1
  898.     move.l        #mes14,d2
  899.     move.l        #mes14length,d3
  900.      bra.L    writer1
  901. disaster_exit
  902.     rts
  903. disaster1
  904.     lea        vir2(pc),a0
  905.     bra.L    write_text
  906.  
  907. **************************************************************************
  908. *
  909. *    DISASTER-MASTER V2    FILE VIRUS
  910. *
  911. *    makes himself resident and changes the DOIO.
  912. *
  913. *    Virus is 1740 bytes long, his name is 'CLS' and is
  914. *    found in the 'C' Dir.
  915. *    When he has infected a disk, he is always the first command
  916. *    in the startup-sequence -> 'CLS *'
  917. *    If you execute him he will clear screen, but if you execute him
  918. *    with 'CLS *' he will do nothing. Looks like a option!
  919. *    Infects everything with 's/startup-sequence' even harddisks.
  920. *
  921. ***************************************************************************
  922.  
  923. * here begins the part taken from VIRUSX4.0 by STEVE TIBBET
  924.  
  925. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  926. ;
  927. ;    Check for and Remove the Xeno Virus
  928. ;
  929. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  930.  
  931. xeno:
  932.     move.l    DOSBase(pc),a0        ; Get addr of Open() Vector
  933.     sub.w    #$1c,a0
  934.     move.l    (a0),a0
  935.  
  936.     move.l    a0,d0            ;: If Bit 0 of the Address is set,
  937.     btst    #0,d0            ;: then it's not really an address
  938.     bne.s    NoVirus_xeno        
  939.     
  940.     cmp.l    #$B47C03EE,(a0)
  941.     bne.s    NoVirus_xeno
  942.     cmp.l    #$67000224,4(a0)
  943.     bne.s    NoVirus_xeno
  944.  
  945.     ;:: If we're here, we're fairly sure A0 is pointing to the
  946.     ;:: base of the Xeno virus (well, not it's base, but the address
  947.     ;:: of the first vector it stole, the Open() one.
  948.     ;:: So we'll nuke it.  8-)
  949.  
  950.     move.w    #$6000,$4(a0)
  951.     move.w    #$603E,$240(a0)
  952.     move.w    #$601E,$29C(a0)
  953.  
  954. * END OF PART
  955.  
  956.     move.b        #1,virusflag-VAR(A5)
  957.     tst.b        launch-VAR(a5)
  958.     bne.s    xeno1
  959.     move.l        #mes13,d2
  960.     move.l        #mes13length,d3
  961.      bsr.L        writer
  962. NoVirus_xeno:
  963.     rts
  964. xeno1
  965.     lea        vir3(pc),a0
  966.     bra.L    write_text
  967.  
  968. ; i hate to do this, but until now i never got a xeno virus and was
  969. ; therefore not able to do my own killer.
  970. ; in addition to that: I HATE THE WAY S.TIBBET KILLS VIRUSES!!!!!!!
  971. ; it is not very intelligent to look for a checksum....
  972.  
  973. revenge:
  974.     move.l        $04.w,a6
  975.     cmp.l        #$7e060,46(a6)
  976.     bne.s    revenge_ende
  977.     move.l        $c0,d0
  978.     cmp.l        #$0c794ef9,$c0
  979.     bne.s    revenge_ende
  980.  
  981.     move.l        $7e068,-454(a6)    ; restoring the old pointers
  982.     move.l        $7e06e,148(a6)     ; by grabbing his saved systemcalls
  983.  
  984.     lea        $7e000,a0    ; the virus
  985.     bsr.L    filler
  986.  
  987.     lea        $c0,a0        ; CLEAR
  988.     moveq        #0,d0        ; his routine
  989.     moveq.l        #$10,d6        ; located at $c0
  990. rev1:
  991.     move.l        d0,(a0)+
  992.     dbf    d6,rev1
  993.  
  994.     bsr.L    killcold_cool        ; out of memory!! HE HE..
  995.  
  996.     move.b        #1,virusflag-VAR(A5)
  997.     tst.b        launch-VAR(a5)
  998.     bne.s    revenge11
  999.     move.l        #mes12,d2
  1000.     move.l        #mes12length,d3
  1001.      bra.L    writer1
  1002. revenge_ende:
  1003.     rts
  1004. revenge11
  1005.     lea        vir4(pc),a0
  1006.     bra.L    write_text
  1007.  
  1008. *************************************************************************
  1009. * REVENGE is a stupid one, it copies a small CONTROLLER part down to
  1010. * $c0 and is ALWAYS located at $7e000. (No interest in Fast Mem!!) 
  1011. * I only added this one, because it was easy and BERSERKER III crashed
  1012. * when REVENGE was in memory. (uses cold cap., 148(a6) & -454(a6) DOIO)
  1013. *************************************************************************
  1014.  
  1015. revenge_boot:    ; seems to be a brand new one...
  1016.     bsr.L        tracker
  1017.     move.l        a0,revenge1-VAR(a5)
  1018.     move.l        (a0),d4
  1019.     swap        d4
  1020.     cmp.b        #$fe,d4        ; Is this pointer normal? (V1.2)
  1021.     beq.L    revenge_boot_ende
  1022.     cmp.b        #$ff,d4        ; Is this pointer normal? (V1.3)
  1023.     beq.L    revenge_boot_ende
  1024.  
  1025.     move.l        $4.w,a6        ; using his own check
  1026.     moveq        #0,d0        ; routine... 
  1027.     move.w        $94(a6),d0
  1028.     and.l        #$f0,d0
  1029.     cmp.w        #$f0,d0
  1030.     beq.L    revenge_boot_ende    ; not in memory
  1031.  
  1032.     move.l        (a0),a1
  1033.     add.l        #$228,a1
  1034.     move.l        (a1),revenge_track-VAR(a5); -28(trackdisk.device)
  1035.     add.l        #$4,a1
  1036.     move.l        (a1),revenge_rast-VAR(a5); 148(a6)
  1037.     add.l        #$4,a1
  1038.     move.l        (a1),revenge_alloc-VAR(a5); the part he spreads
  1039.     sub.l        #$3c4,a1
  1040.     move.l        a1,revenge_mem-VAR(a5)    ; his own start
  1041.  
  1042.     move.l        revenge1-VAR(a5),a0        ; restoring pointers
  1043.     move.l        revenge_track-VAR(a5),(a0)
  1044.  
  1045.     move.l        revenge_rast-VAR(a5),$94(a6)        
  1046.  
  1047.     bsr.L    clear_kicktag
  1048.  
  1049.     move.l        revenge_mem-VAR(a5),a0
  1050.     bsr.L    filler
  1051.  
  1052.     move.l        revenge_alloc-VAR(a5),a0
  1053.     bsr.L    filler
  1054.  
  1055.     move.l        revenge_alloc-VAR(a5),a1    ; he allocatesw memory..
  1056.     move.l        #$400,d0        ; ani i give it back...
  1057.     jsr    freemem(a6)
  1058.  
  1059.     move.b        #1,virusflag-VAR(A5)
  1060.     tst.b        launch-VAR(a5)
  1061.     bne.s    revenge_boot1
  1062.     move.l        #mes11,d2
  1063.     move.l        #mes11length,d3
  1064.      bra.L    writer1
  1065. revenge_boot_ende:
  1066.     rts
  1067. revenge_boot1
  1068.     lea        vir5(pc),a0
  1069.     bra.L    write_text
  1070.  
  1071. *************************************************************************
  1072. *
  1073. * seems to be a new one -> contains ASCII Text 'REVENGE BOOTLOADER' 
  1074. *
  1075. *************************************************************************
  1076.  
  1077. disk_doctor:
  1078.     move.l        $04.w,a6    ; Disk-Doc uses cold & cool capture
  1079.     move.l        46(a6),d0
  1080.                     ; No other virus uses both
  1081.     beq.L    dd0            ; pointers... [ hope so !!! ]
  1082.     move.l        42(a6),d0
  1083.     beq.L    dd0
  1084.  
  1085.     move.l        42(a6),diskdoc-VAR(a5)    ; I had to add this very
  1086.     move.l        diskdoc-VAR(a5),a0    ; complicated routine because
  1087.     add.l        #$c4,a0        ; Disk-Doc uses or changes:
  1088.     move.l        a0,a1        ; - cool capt.
  1089.     addq.l        #4,a1        ; - cold capt.
  1090.     move.w        #$4e75,(a1)    ; - DoIO
  1091.     jsr        (a0)        ; - 148(a6) [what's that?]
  1092.     move.l        a2,diskdoc1-VAR(a5)    ; - The task of clipboard.device
  1093.     addq.l        #6,a2
  1094.     move.l        a2,a3        ; This routine gets the adress of
  1095.     addq.l        #4,a2        ; its task routine and cuts it off
  1096.     move.w        #$4e75,(a2)
  1097.     jsr        (a3)
  1098.     move.l        a0,diskdoc2-VAR(a5)
  1099.     bsr.L        killcold_cool
  1100.     move.l        $04.w,a6
  1101.     move.l        #$fc06dc,-$1c6(A6); Only Kick 1.2 values, on 1.3
  1102.     move.l        #$fc12fc,148(a6)  ; Disk-Doc shouldn't work...
  1103.  
  1104.     move.l        diskdoc-VAR(a5),a0
  1105.     move.l        a0,a1
  1106.     add.l        #$1a0,a1
  1107.     moveq        #0,d0
  1108. dd2:    move.l        d0,(a0)+
  1109.     cmpa.l        a0,a1
  1110.     bge.s    dd2
  1111.     move.l        diskdoc1-VAR(a5),a2
  1112.     move.w        #$4e75,(a2)
  1113.     move.l        diskdoc2-VAR(a5),a2
  1114.     move.w        #$4e75,(a2)
  1115.  
  1116.     move.b        #1,virusflag-VAR(A5)
  1117.     tst.b        launch-VAR(a5)
  1118.     bne.s    dd1
  1119.     move.l        #mes6,d2
  1120.     move.l        #mes6length,d3
  1121.      bra.L    writer1
  1122. dd0:    rts
  1123. dd1
  1124.     lea        vir7(pc),a0
  1125.     bra.L    write_text
  1126.  
  1127. ***********************************************************************
  1128. *
  1129. *    DISK-DOCTOR
  1130. *
  1131. *    - After each reset Disk Doctor allocates more memory
  1132. *    - This was in my opinion the best one, although it could be
  1133. *      better: - it uses DoIO pointer from Kick 1.2 (crash on 1.3)
  1134. *          - you can read text in the boot-block
  1135. *    - it uses the clipboard task for its dirty work
  1136. *    - it uses cold & cool capture to stay in memory
  1137. *
  1138. *    For such kind of virus Guardian or VirusX are the best killers!!
  1139. *    ( Find them in the boot and fight them when they are harmless! )
  1140. *    Same with TIMEBOMB, Berserker can't fight this one........
  1141. ************************************************************************
  1142.  
  1143. gadaffi:
  1144.     move.l        $04.w,a6    ; Gadaffi uses cool capture
  1145.     cmp.l        #0,46(a6)    ; for its dirty work...
  1146.     beq.s        gad0        ; no cool capture set
  1147.  
  1148.     cmp.l        #$47414441,$7fb40; Gadaffi
  1149.     bne.s        gad0        ; is ALWAYS to be found at $7fb00
  1150.  
  1151.     move.l        -$1c6(a6),d5    ; $4b0 with 512 kb
  1152.     swap        d5
  1153.     cmp.w        #$fc,d5        ; $fc06dc (1.2)  $fc0718 (1.3)
  1154.     beq.s        gad0
  1155.  
  1156.     move.l        46(a6),gadaf-VAR(a5)
  1157.     bsr.L    killcold_cool        ; Clear its cool pointer
  1158.     move.l        $04.w,a6
  1159.     move.l        #$fc06dc,-$1c6(A6)
  1160.  
  1161.     bsr.L        clear_kicktag
  1162.  
  1163.     move.l        gadaf-VAR(a5),a0
  1164.     sub.l        #$dc,a0
  1165.     bsr.L    filler
  1166.     move.b        #1,virusflag-VAR(A5)
  1167.     tst.b        launch-VAR(a5)
  1168.     bne.s    gad11
  1169.     move.l        #mes4,d2
  1170.     move.l        #mes4length,d3
  1171.      bra.L    writer1
  1172. gad0:    rts
  1173. gad11
  1174.     lea        vir11(pc),a0
  1175.     bra.L    write_text
  1176.  
  1177. ********************************************************************
  1178. *
  1179. *    GADAFFI is a mutant version of Byte Warrior
  1180. *
  1181. *    - It changes cool capture, kicktag. and DoIO
  1182. *    - It is much more stupid than Byte Warrior:
  1183. *     -> you can read it in the boot...
  1184. *     -> normally it crashes with Kick 1.3 because
  1185. *        he uses the DoIO vector of 1.2 itself
  1186. *    - After 12 resets it tries to kill your drive, or
  1187. *      was it playing a drive music ?? (I don't see any difference!)
  1188. *
  1189. ********************************************************************
  1190. bsg:
  1191.     move.l        $04.w,a6
  1192.     move.l        546(a6),d0    ; BSG 9 is a resident module
  1193.     adda.l        550(a6),d0    ; It is still in memory after
  1194.     adda.l        554(a6),d0    ; a reset
  1195.     beq.s    bsgende
  1196.     move.l        550(a6),a0    ; Searching from A0
  1197.     move.l        a0,a1
  1198.     add.l        #$1000,a1    ; Searching to A1
  1199.     move.l        #$00005454,d0    ; Searching for 'TT'
  1200.     moveq        #0,d1
  1201. bsg0:
  1202.     move.w        (a0)+,d1
  1203.     cmp.w        d1,d0
  1204.     beq.s    bsg1
  1205.     cmpa.l        a0,a1
  1206.     bge.s    bsg0
  1207.     rts                ; Nothing found !
  1208.                     ; It is not always a virus which
  1209.                     ; uses these pointers. It could
  1210. bsg1:                    ; also be your ramdrive....
  1211.     move.w        #$5631,d0
  1212.     move.w        (a0),d1
  1213.     cmp.w        d1,d0
  1214.     bne.s    bsg0
  1215.     moveq        #0,d0        ; Kills it from beginning
  1216.     move.l        a0,a1        ; to 'TTV1' <- its end marker
  1217.     move.l        550(a6),a0
  1218. bsg2:
  1219.     move.l        d0,(a0)+
  1220.     cmpa.l        a0,a1
  1221.     bne.s    bsg2
  1222.  
  1223.     bsr.L        clear_kicktag
  1224.  
  1225.     move.b        #1,virusflag-VAR(A5)
  1226.     tst.b        launch-VAR(a5)
  1227.     bne.s    bsg3
  1228.     move.l        #mes2,d2
  1229.     move.l        #mes2length,d3
  1230.      bra.L    writer
  1231. bsgende:
  1232.     rts
  1233. bsg3
  1234.     lea        vir9(pc),a0
  1235.     bra.L    write_text
  1236.  
  1237. ********************************************************************
  1238. *
  1239. *    BSG 9 is an intelligent version of a link virus
  1240. *
  1241. *    - It always modifies the FIRST file of the startup-
  1242. *      sequence
  1243. *    - The file now always is about 2608 bytes long
  1244. *    - The old file in in the devs dir with
  1245. *      spaces instead of a name now
  1246. *    - After the fourth or fifth reset it turns the
  1247. *      screen black and prints out its stupid message.
  1248. *
  1249. *********************************************************************
  1250.  
  1251. irq:    ; changes oldopen
  1252.     move.l        $04.w,a6
  1253.     move.l        -$196(a6),d4
  1254.     swap        d4
  1255.     cmp.b        #$fc,d4    ; V1.2 00fc1430  V1.3 00fc146c
  1256.     beq.s    irq5
  1257.     move.l        -$196(a6),a4
  1258.     add.w        #8,a4
  1259.     move.l        #$4e714e71,(a4)    ; Castrate virus
  1260.     sub.l        #$196,a6    ; In this part the old
  1261.     move.l        (a6),a4        ; oldopenlib call
  1262.     add.l        #18,a4        ; is restored...
  1263.     move.l        (a4),(a6)
  1264.     move.b        #1,virusflag-VAR(A5)
  1265.     tst.b        launch-VAR(a5)
  1266.     bne.s    irq1
  1267.     move.l        #mes3,d2
  1268.     move.l        #mes3length,d3
  1269.     bra.L    writer
  1270. irq5    rts
  1271. irq1    lea        vir10(pc),a0
  1272.     bra.L    write_text
  1273.  
  1274. **************************************************************
  1275. *
  1276. *    The IRQ Team Virus was the first link virus
  1277. *    on AMIGA...
  1278. *
  1279. *    It uses oldopenlibrary for its dirty work.
  1280. *    In order to work properly with all Kickstart
  1281. *    versions the IRQ-virus saves the replaced
  1282. *    sytemcall in memory.
  1283. *    To let my Berserker work with all kick versions
  1284. *    I just grab his saved sytemcall in order to
  1285. *    throw him out properly...
  1286. *
  1287. **************************************************************
  1288.  
  1289. exterminator:    ; in trddevice, doio & kicktag... ($4678, $414, $898)
  1290.     bsr.L        tracker
  1291.     move.l        a0,exter-VAR(a5)
  1292.     move.l        (a0),d4
  1293.     swap        d4
  1294.     cmp.b        #$fe,d4        ; Is the pointer normal (V1.2)
  1295.     beq.L    exe4
  1296.     cmp.b        #$ff,d4
  1297.     beq.L    exe4        ; Is the pointer normal (V1.3)
  1298.  
  1299.     move.l        a6,a4
  1300.     sub.w        #$262,a4    ; In A5 now Exterminator's address..
  1301.     move.l        a4,exter1-VAR(a5)
  1302.     move.l        (a4),d4
  1303.     swap        d4
  1304.     cmp.b        #$fc,d4        ; Is it the normal system call?
  1305.     beq.s    exe4
  1306.  
  1307.     move.l        exter1-VAR(a5),a4
  1308.     move.l        (a4),a0
  1309.     sub.l        #$14e,a0
  1310.     move.l        a0,a1
  1311.     add.l        #$400,a1
  1312.     moveq        #0,d1
  1313.     moveq        #0,d0
  1314. exe7:
  1315.     move.w        #$4c41,d0    ; We are looking for 'LAMER'
  1316.     move.w        (a0)+,d1
  1317.     cmp.w        d1,d0
  1318.     beq.s    exe2
  1319.     cmpa.l        a0,a1
  1320.     bge.s    exe7
  1321.     rts
  1322. exe2:
  1323.     move.w        #$4d45,d0
  1324.     move.w        (a0),d1
  1325.     cmp.w        d1,d0
  1326.     bne.s    exe7
  1327.     add.l        #28,a0        ; Here exteminator saves his
  1328.     move.l        (a0)+,a1    ; changed system calls
  1329.     move.l        (a0)+,a2
  1330.  
  1331.  
  1332.     bsr.L    clear_kicktag
  1333.  
  1334.     move.l        exter1-VAR(a5),a0    ; Correct both pointers
  1335.     move.l        a1,(a0)
  1336.     move.l        exter-VAR(a5),a0
  1337.     move.l        a2,(a0)
  1338.     move.l        exter1-VAR(a5),a4    ; Crucify it
  1339.     move.l        (a4),a0
  1340.     sub.l        #$14e,a0
  1341.     bsr.L    filler
  1342.     move.b        #1,virusflag-VAR(A5)
  1343.     tst.b        launch-VAR(a5)
  1344.     bne.s    exe1
  1345.     move.l        #mes9,d2
  1346.     move.l        #mes9length,d3
  1347.     bra.L    writer1
  1348. exe4:    rts
  1349. exe1
  1350.     lea        vir13(pc),a0
  1351.     bra.L    write_text
  1352.  
  1353. ***********************************************************************
  1354.  
  1355. sca:
  1356.     move.l        $04.w,a6
  1357.     move.l        46(a6),d2    ; Cold-capture
  1358.     bne.s        sca1
  1359.     rts
  1360. sca1:
  1361.     move.b        #1,virusflag-VAR(A5)
  1362.     move.l        46(a6),a0
  1363.     move.l        a0,a1
  1364.     sub.l        #$3e,a0        ; We are now searching
  1365.     add.l        #$400,a1    ; for jsr -456(a6) [DoIO]
  1366.     moveq        #0,d1        ; if cold capture is set
  1367.     moveq        #0,d0        ; and in the routine is
  1368. sca2:                    ; a DoIO it is 100% a
  1369.     move.w        #$4eae,d0    ; virus ( mostly mutants)
  1370.     move.w        (a0)+,d1
  1371.     cmp.w        d1,d0
  1372.     beq.s        sca3
  1373.     cmpa.l        a0,a1
  1374.     bge.s        sca2
  1375.     rts                ; Nothing found
  1376. sca3:
  1377.     move.w        #$fe38,d0
  1378.     move.w        (a0),d1
  1379.     cmp.w        d1,d0
  1380.     bne.s    sca2
  1381.     move.l        $7eff0,d2    ; Here is the direct test
  1382.     cmp.l         #$53434121,d2    ; if it is SCA or AEK or LSD
  1383.     beq.s    sca4            ; if it is none of them it is
  1384.                     ; another mutant SCA...
  1385.     bra.s    scamutants
  1386. sca4:
  1387.     tst.b        launch-VAR(a5)
  1388.     bne.s    sca01
  1389.     move.l        #mes5,d2    ; SCA
  1390.     move.l        #mes5length,d3
  1391.      bsr.L    writer1
  1392.     bra.s    scakill
  1393. sca01
  1394.     lea        vir12(pc),a0
  1395.     bsr.L    write_text
  1396.  
  1397.     bra.s    scakill    
  1398. scamutants:
  1399.     tst.b        launch-VAR(a5)
  1400.     bne.s    sca02
  1401.     move.l        #mes8,d2    ; Mutant
  1402.     move.l        #mes8length,d3
  1403.      bsr.L    writer1
  1404. scakill:
  1405.     move.l        46(a6),a0
  1406.     sub.l        #$3e,a0
  1407.     bsr.L    filler
  1408.     bra.L    killcold_cool    ; Repairs both vectors
  1409. sca02
  1410.     lea        vir6(pc),a0
  1411.     bsr.L    write_text
  1412.     bra.s    scakill
  1413. ************************************************************************
  1414.  
  1415. dasa:
  1416.     move.l        $04.w,a6
  1417.     move.l        -$1c6(a6),d5    ; $4b0 with 512 kb
  1418.     swap        d5
  1419.     cmp.w        #$fc,d5        ; $fc06dc (1.2)  $fc0718 (1.3)
  1420.     bne.s    dasa0
  1421.     move.l        $7f804,d5    ; Dasa is ALWAYS at $7f800
  1422.     cmp.l        #$64116dec,d5    ; no need to restore doio
  1423.     beq.s    dasa1            ; pointer (not changed)
  1424.     rts
  1425. dasa0:
  1426.     move.l        #$00fc06dc,-$1c6(a6)    ; Remove its pointer
  1427. dasa1:    move.l        -$1c6(a6),a3
  1428.     sub.l        #$16e,a3    ; Its beginning
  1429.  
  1430.     bsr.L    clear_kicktag
  1431.  
  1432.     move.l        #$4ff,d1    ; Delete virus
  1433. dasa2:    move.b        d0,(a3)+
  1434.     dbf        d1,dasa2
  1435.     move.b        #1,virusflag-VAR(A5)
  1436.     tst.b        launch-VAR(a5)
  1437.     bne.s    dasa3
  1438.     move.l        #mes1,d2
  1439.     move.l        #mes1length,d3
  1440.     bra.L    writer1
  1441. dasa3
  1442.     lea        vir8(pc),a0
  1443.     bra.L    write_text
  1444.  
  1445. ****************************************************************
  1446. *
  1447. *    DASA is the Byte Warrior
  1448. *
  1449. *    DASA is always located at $7f800 and since
  1450. *    it uses a direct jump for DoIO of kick V1.2
  1451. *    ( jmp $fc06dc ) for his own copy-routines it
  1452. *    crashes on kick v1.3.
  1453. *    Therefore I have added this two way search, because
  1454. *    when it's kick 1.3 DASA can't work but is still in
  1455. *    memory and I don't like a virus in memory...
  1456. *
  1457. *        ONLY A DEAD VIRUS IS A GOOD VIRUS!!!!
  1458. *
  1459. ***************************************************************
  1460.  
  1461. bytebandit:            ; Searches for byte bandit
  1462.  
  1463.     bsr.L        tracker
  1464.     move.l        a0,bb1
  1465.     cmp.l        #$00f00000,a0
  1466.     ble.s    bytebandit1        ; OK! DoIO is changed
  1467.     rts
  1468.  
  1469. bytebandit1:
  1470.     move.l        148(a6),a0    ; Now second test if it
  1471.     cmp.l        #$00f00000,a0    ; is really byte bandit
  1472.     ble.s    bytebandit2        ; LAMER also changes DoIO!
  1473.     rts
  1474.  
  1475. bytebandit2:    ; it is byte bandit!!
  1476.     move.l        a0,a4
  1477.     add.l        #$10c,a0    ; Here the pointers are
  1478.     move.l        (a0)+,a1    ; saved...
  1479.     move.l        (a0),a2
  1480.     move.l        bb1,a0
  1481.     move.l        a1,(a0)        ; Restoring both
  1482.     move.l        a2,148(a6)    ; pointers...
  1483.  
  1484.     bsr.L    clear_kicktag
  1485.  
  1486.     sub.l        #$2ca,a4    ; Its beginning
  1487.     move.l        a4,a0
  1488.     bsr.L    filler
  1489.  
  1490.     move.b        #1,virusflag-VAR(A5)
  1491.     tst.b        launch-VAR(a5)
  1492.     bne.s    bb22
  1493.     move.l        #mes10,d2
  1494.     move.l        #mes10length,d3
  1495.     bra.L    writer1
  1496. bb22
  1497.     lea        vir14(pc),a0
  1498.     bra.L    write_text
  1499.  
  1500. ***************** M E S S A G E S  AND  D A T A S ********************
  1501. even
  1502. mes:    dc.b $0a,'Virus killed, check your disks....'
  1503.     dc.b $0a,$0a             
  1504. mesend:
  1505. meslength = mesend-mes
  1506. even
  1507. mes0:    dc.b $0a,$9b,'7;32;41m'
  1508.     dc.b $1b,'[1m'
  1509.     dc.b '   BERSERKER found ** NO VIRUS ** in memory !!!  '   
  1510.     dc.b $1b,'[0m'
  1511.     dc.b $9b,'0;31;40m'
  1512.     dc.b $0a,$0a
  1513. mes0end:
  1514. mes0length = mes0end-mes0
  1515. even
  1516. mes1:    dc.b $0a,$0c,'DANGER!! BYTE - WARRIOR (DASA) VIRUS found'
  1517. mes1end:
  1518. mes1length = mes1end-mes1
  1519. even
  1520. mes2:    dc.b $0a,$0c,'DANGER!!  BSG 9 LINK -  VIRUS killed!!!'                
  1521.     dc.b $0a,'Check first prog. in startup seq. or look into devs.'
  1522.     dc.b $0a
  1523. mes2end:
  1524. mes2length = mes2end-mes2
  1525. even
  1526. mes3:    dc.b $0a,$0c,'DANGER!!  IRQ LINK - VIRUS killed!!!'                
  1527.     dc.b $0a,'Check 2nd prog. in startup seq. or cli-command DIR.'
  1528.     dc.b $0a
  1529. mes3end:
  1530. mes3length = mes3end-mes3
  1531. even
  1532. mes4:    dc.b $0a,$0c,'DANGER!!  GADAFFI - VIRUS found!!!'                
  1533. mes4end:
  1534. mes4length = mes4end-mes4
  1535. even
  1536. mes5:    dc.b $0a,$0c,'DANGER!!  SCA - VIRUS found!!!'                
  1537. mes5end:
  1538. mes5length = mes5end-mes5
  1539. even
  1540. mes6:    dc.b $0a,$0c,'DANGER!!  Disk-Doctor VIRUS found!!!'                
  1541. mes6end:
  1542. mes6length = mes6end-mes6
  1543. even
  1544. mes8:    dc.b $0a,$0c,'DANGER!!  MUTANT SCA - VIRUS found!!!'                
  1545. mes8end:
  1546. mes8length = mes8end-mes8
  1547. even
  1548. mes9:    dc.b $0a,$0c,'DANGER!!  EXTERMINATOR (Lamer!) found!!!'                
  1549. mes9end:
  1550. mes9length = mes9end-mes9
  1551. even
  1552. mes10:    dc.b $0a,$0c,'DANGER!!  BYTE - BANDIT VIRUS found!!!'
  1553. mes10end:
  1554. mes10length = mes10end-mes10
  1555. even
  1556. mes11:    dc.b $0a,$0c,'DANGER!! REVENGE - BOOTLOADER VIRUS found!'
  1557. mes11end:
  1558. mes11length = mes11end-mes11
  1559. even
  1560. mes12:    dc.b $0a,$0c,'DANGER!! REVENGE VIRUS found!'
  1561. mes12end:
  1562. mes12length = mes12end-mes12
  1563. even
  1564. mes13:    dc.b $0a,$0c,'DANGER!!  XENO LINK - VIRUS neutralized!!'                
  1565.     dc.b $0a,'Check files on disks and hard-disk with "KV".'
  1566.     dc.b $0a,$0a
  1567. mes13end:
  1568. mes13length = mes13end-mes13
  1569. even
  1570. mes14:    dc.b $0a,$0c,'DANGER!!  Disaster-Master V2 FILE VIRUS killed!!!'                
  1571.     dc.b $0a,'Check first prog. in startup seq. & cli-command CLS.'
  1572.     dc.b $0a,$0a
  1573. mes14end:
  1574. mes14length = mes14end-mes14
  1575. even
  1576. mes16:    dc.b $0a,$0c,'DANGER!!  CENTURION LINK - VIRUS neutralized!!'                
  1577.     dc.b $0a,'Check files in startup-sequence.'
  1578.     dc.b $0a,$0a
  1579. mes16end:
  1580. mes16length = mes16end-mes16
  1581. even
  1582. mes17:    dc.b $0a,$0c,'SORRY!!  You have the wrong KICKSTART.'                
  1583.     dc.b $0a,'BERSERKER cannot work with this version.'
  1584.     dc.b $0a,$0a
  1585. mes17end:
  1586. mes17length = mes17end-mes17
  1587. even
  1588. mes18:    dc.b $0a,$0c,'DANGER!!  Traveling Jack - VIRUS neutralized!!'                
  1589.     dc.b $0a
  1590. mes18end:
  1591. mes18length = mes18end-mes18
  1592. even
  1593. mes19:    dc.b    $0a
  1594.     dc.b "   BERSERKER could not load 'BERSERKER-HANDLER'..  "   
  1595.     dc.b $0a
  1596. mes19end:
  1597. mes19length = mes19end-mes19
  1598. even
  1599. mes20:    dc.b    " was NOT installed!!  "
  1600. mes20end:
  1601.     dc.b    0
  1602. mes20length = mes20end-mes20
  1603. even
  1604. mes21:    dc.b    " CHECKER is removed!! "
  1605. mes21end:
  1606.     dc.b    0
  1607. mes21length = mes21end-mes21
  1608. even
  1609. mes22:    dc.b     " CHECKER is installed."   
  1610. mes22end:
  1611.     dc.b    0
  1612. mes22length = mes22end-mes22
  1613. even
  1614. mes23:    dc.b     " ALREADY installed...."   
  1615. mes23end:
  1616.     dc.b    0
  1617. mes23length = mes23end-mes23
  1618. even
  1619. mes24:    dc.b    $0a,$0a
  1620. mes24end:
  1621. mes24length = mes24end-mes24
  1622. even
  1623. mes25:    dc.b     " !! could not load !! ",0   
  1624. mes25end:
  1625. mes25length = mes25end-mes25
  1626. even
  1627. mes15:
  1628. dc.b $0c,$1b,'[1m','                        *****  BERSERKER 5.02  *****'
  1629. dc.b $1b,'[0m'
  1630. dc.b    $0a
  1631. dc.b $0a,'       1. This Viruskiller finds and destroys the following:'
  1632. dc.b $0a,'          Byte Bandit,  Byte Warrior (DASA), SCA,  AEK, LSD,'
  1633. dc.b $0a,'          OBELISK, WARHAWK,  PENTAGON, BAMIGA S1, NORTHSTAR,'
  1634. dc.b $0a,'          Exterminator (LAMER) all versions,  GADAFFI Virus,'
  1635. dc.b $0a,'          Disk-Doctor Virus, IRQ-Team 41 Virus (Link Virus),'
  1636. dc.b $0a,'          BSG9 VIRUS (Link Virus), REVENGE BOOTLOADER Virus,'
  1637. dc.b $0a,'          REVENGE, XENO Link, Disaster Master File Virus,'
  1638. dc.b $0a,'          CENTURION & JACK Link Virus (all versions).'
  1639. dc.b $0a,'       2. All bootblock  viruses  will be deleted from memory'
  1640. dc.b $0a,'          and all  changed  system pointers will be restored.'
  1641. dc.b $0a,'       3. The  Link Viruses  are only  killed in memory. They'
  1642. dc.b $0a,'          might have infected some prgs. on disk!! Take care!'
  1643. dc.b $0a,'          If you  want  protection from  JACK  and  CENTURION'
  1644. dc.b $0a,'          you have to choose option I ( install checker ).'
  1645. mes115end:
  1646. mes115length = mes115end-mes15
  1647. dc.b $0a,'       4. Berserker  gives you the choice to kill the cold- &'
  1648. dc.b $0a,'          cool capture....(only from CLI)'
  1649. dc.b $0a,'       5. BERSERKER checks libraries.....'
  1650. dc.b $0a,'       6. You can  launch a permanent  CHECKER, which remains'
  1651. dc.b $0a,'          in memory and  checks always for  JACK & CENTURION.'
  1652. dc.b $0a
  1653. dc.b $1b,'[1m'    ; dick
  1654. dc.b $0a,'      CLI OPTIONS:  [ C (kill COLD & COOL)] [ ? (instructions)]'
  1655. DC.B $0A,'            [ I (install checker)]  [ R (remove checker)]'
  1656. dc.b $1b,'[0m'
  1657. dc.b $0a
  1658. dc.b $1b,'[1m'
  1659. dc.b $0a,'                    This program is in the PUBLIC DOMAIN!!!'
  1660. dc.b $1b,'[3m'
  1661. dc.b $0a
  1662. dc.b $0a,'                               ©Copyright 1988, 1989, 1990 by Ralf Thanner.'
  1663. dc.b $1b,'[0m'
  1664. dc.b $0a
  1665. mes15end:
  1666. mes15length = mes15end-mes15
  1667. mes315length = mes15end-mes115end
  1668. even
  1669. mes215:
  1670. dc.b $0a,$0a,$1b,'[1m'    ; dick
  1671. dc.b $0a,'                    PRESS RIGHT MOUSE BUTTON'
  1672. dc.b $1b,'[0m'
  1673. mes215end:
  1674. mes215length = mes215end-mes215
  1675. EVEN
  1676. mes415:
  1677. dc.b $0a,$0a,$1b,'[1m'    ; dick
  1678. dc.b $0a,'                        PRESS RETURN'
  1679. dc.b $1b,'[0m'
  1680. mes415end:
  1681. mes415length = mes415end-mes415
  1682. EVEN
  1683.  con:
  1684. dc.b'CON:0/0/640/190/            BERSERKER 5.02      INSTRUCTIONS        ',0
  1685. EVEN
  1686.  con_error:
  1687.     dc.b    $0c
  1688.  con_clear:
  1689. EVEN
  1690. ;=============================================================================
  1691. VAR:
  1692.  newtaskpri:    dc.l    0
  1693.  mytask:    dc.l     0
  1694.  my_rastport:    dc.l    0
  1695.  windowhandle:    dc.l    0    
  1696.  message_list:    dc.l    0,0,0
  1697.  userport:    dc.l    0    
  1698.  gad_table:    dc.l    gad1,gad2,gad3,gad4,gad5
  1699.  revenge1:    dc.l    0
  1700.  revenge_alloc:    dc.l    0
  1701.  revenge_track:    dc.l    0
  1702.  revenge_rast:    dc.l    0
  1703.  revenge_mem:    dc.l    0
  1704.  diskdoc:    dc.l    0
  1705.  diskdoc1:    dc.l    0
  1706.  diskdoc2:    dc.l    0
  1707.  gadaf:        dc.l    0
  1708.  bb1:        dc.l    0
  1709.  exter:        dc.l    0
  1710.  exter1:    dc.l    0
  1711.  expbase:     dc.l    0 
  1712.  gfxbase:     dc.l    0 
  1713.  laybase:     dc.l    0 
  1714.  dosbase:     dc.l    0 
  1715.  IntBase:    dc.l    0
  1716.  trackdisk:    dc.l    0
  1717.  handle:    dc.l    0
  1718.  message:    dc.l    0
  1719.  kickflag:    dc.w    0
  1720.  pal:        dc.w    0
  1721.  input_buffer:    dc.w    0
  1722.  launcher:    dc.b    0
  1723.  remover:    dc.b    0    
  1724.  no_killy:    dc.b     $ff
  1725.  virusflag:    dc.b    0
  1726.  leave_it:    dc.b    0
  1727.  launch:    dc.b    0
  1728.  TASK_NAME:    dc.b    'BerserkerV5.0',0
  1729.  MSG_PORT_NAME:    dc.b    'BERSERKER',0
  1730. EVEN
  1731.  NAME:        DC.B    'l:Berserker-Handler',0
  1732. EVEN
  1733.  TRDDEVICE:    DC.B    'trackdisk.device',0
  1734. EVEN
  1735.  INTNAME:     DC.B    'intuition.library',0
  1736. EVEN
  1737.  EXPNAME:     DC.B    'expansion.library',0
  1738. EVEN
  1739.  GFXNAME:     DC.B    'graphics.library',0
  1740. EVEN 
  1741.  LAYNAME:     DC.B    'layers.library',0
  1742. EVEN
  1743.  DOSNAME:    DC.B    'dos.library',0
  1744. EVEN
  1745.  EXENAME:    DC.B    'exec.library',0
  1746. EVEN
  1747. ;=============================================================================
  1748. alert1:    dc.w     178
  1749.     dc.b     16
  1750.     dc.b     'Berserker found VIRUS in memory!'
  1751. EVEN
  1752. alert3:    dc.w     128
  1753.     dc.b     16
  1754.     dc.b     'CHECKSUM of   '
  1755. alert4: dc.b    '                   '
  1756.     dc.b    'is NOT correct....',0
  1757. EVEN
  1758. NewWindowStructure1:
  1759.     dc.w    0,0    ;105,58    ;window XY origin relative to TopLeft of screen
  1760.     dc.w    204,130    ;window width and height
  1761.     dc.b    0,2    ;detail and block pens
  1762.     dc.l    CLOSEWINDOW+GADGETUP    ;IDCMP flags
  1763.     dc.l    WINDOWDEPTH+WINDOWCLOSE+WINDOWDRAG+ACTIVATE+WINDOWACTIVE+NOCAREREFRESH+RMBTRAP
  1764.     dc.l    GadgetList1    ;first gadget in gadget list
  1765.     dc.l    NULL    ;custom CHECKMARK imagery
  1766.     dc.l    NewWindowName1    ;window title
  1767.     dc.l    NULL    ;custom screen pointer
  1768.     dc.l    NULL    ;custom bitmap
  1769.     dc.w    5,5    ;minimum width and height
  1770.     dc.w    -1,-1    ;maximum width and height
  1771.     dc.w    WBENCHSCREEN    ;destination screen type
  1772. NewWindowName1:
  1773.     dc.b    'BERSERKER 5.02 ',0
  1774. EVEN
  1775. GadgetList1:
  1776. Gad1:
  1777.     dc.l    Gad2    ;next gadget
  1778.     dc.w    28,26-9    ;origin XY of hit box relative to window TopLeft
  1779.     dc.w    149,11    ;hit box width and height
  1780.     dc.w    NULL    ;gadget flags
  1781.     dc.w    RELVERIFY    ;activation flags
  1782.     dc.w    BOOLGADGET    ;gadget type flags
  1783.     dc.l    Border1    ;gadget border or image to be rendered
  1784.     dc.l    NULL    ;alternate imagery for selection
  1785.     dc.l    IText1    ;first IntuiText structure
  1786.     dc.l    NULL    ;gadget mutual-exclude long word
  1787.     dc.l    NULL    ;SpecialInfo structure
  1788.     dc.w    NULL    ;user-definable data
  1789.     dc.l    NULL    ;pointer to user-definable data
  1790. Border1:
  1791.     dc.w    -1,0    ;XY origin relative to container TopLeft
  1792.     dc.b    3,0,RP_JAM1    ;front pen, back pen and drawmode
  1793.     dc.b    5    ;number of XY vectors
  1794.     dc.l    BorderVectors2    ;pointer to XY vectors
  1795.     dc.l    NULL    ;next border in list
  1796. IText1:
  1797.     dc.b    3,0,RP_JAM2,0    ;front and back text pens, drawmode and fill byte
  1798.     dc.w    24,1+1    ;XY origin relative to container TopLeft
  1799.     dc.l    NULL    ;font pointer or NULL for default
  1800.     dc.l    ITextText1
  1801.     dc.l    NULL    ;next IntuiText structure
  1802. ITextText1:
  1803.     dc.b    'CHECK MEMORY',0
  1804. EVEN
  1805. Gad2:
  1806.     dc.l    Gad3
  1807.     dc.w    28,42-9
  1808.     dc.w    149,11
  1809.     dc.w    NULL
  1810.     dc.w    RELVERIFY
  1811.     dc.w    BOOLGADGET
  1812.     dc.l    Border1
  1813.     dc.l    NULL
  1814.     dc.l    IText2
  1815.     dc.l    NULL
  1816.     dc.l    NULL
  1817.     dc.w    null
  1818.     dc.l    NULL
  1819. BorderVectors2:
  1820.     dc.w    0,-1
  1821.     dc.w    149,-1
  1822.     dc.w    149,11
  1823.     dc.w    0,11
  1824.     dc.w    0,-1
  1825. IText2:
  1826.     dc.b    3,0,RP_JAM2,0
  1827.     dc.w    1+5,1+1
  1828.     dc.l    NULL
  1829.     dc.l    ITextText2
  1830.     dc.l    NULL
  1831. ITextText2:
  1832.     dc.b    ' INSTALL CHECKER',0
  1833. EVEN
  1834. Gad3:
  1835.     dc.l    Gad4
  1836.     dc.w    28,58-9
  1837.     dc.w    149,11
  1838.     dc.w    NULL
  1839.     dc.w    RELVERIFY
  1840.     dc.w    BOOLGADGET
  1841.     dc.l    Border1
  1842.     dc.l    NULL
  1843.     dc.l    IText3
  1844.     dc.l    NULL
  1845.     dc.l    NULL
  1846.     dc.w    null
  1847.     dc.l    NULL
  1848. IText3:
  1849.     dc.b    3,0,RP_JAM2,0
  1850.     dc.w    5+5,1+1
  1851.     dc.l    NULL
  1852.     dc.l    ITextText3
  1853.     dc.l    NULL
  1854. ITextText3:
  1855.     dc.b    ' REMOVE CHECKER',0
  1856. EVEN
  1857. Gad4:
  1858.     dc.l    Gad5
  1859.     dc.w    28,74-9    
  1860.     dc.w    149,11
  1861.     dc.w    NULL    
  1862.     dc.w    RELVERIFY
  1863.     dc.w    BOOLGADGET
  1864.     dc.l    Border1
  1865.     dc.l    NULL
  1866.     dc.l    IText4
  1867.     dc.l    NULL    
  1868.     dc.l    NULL    
  1869.     dc.w    null
  1870.     dc.l    NULL    
  1871. IText4:
  1872.     dc.b    3,0,RP_JAM2,0
  1873.     dc.w    11+8,1+1
  1874.     dc.l    NULL
  1875.     dc.l    ITextText4
  1876.     dc.l    NULL
  1877. ITextText4:
  1878.     dc.b    ' INSTRUCTIONS',0
  1879. EVEN
  1880. Gad5:
  1881.     dc.l    NULL
  1882.     dc.w    28,97-9
  1883.     dc.w    149,11
  1884.     dc.w    NULL
  1885.     dc.w    RELVERIFY
  1886.     dc.w    BOOLGADGET
  1887.     dc.l    Border1
  1888.     dc.l    NULL
  1889.     dc.l    IText5
  1890.     dc.l    NULL
  1891.     dc.l    NULL
  1892.     dc.w    null
  1893.     dc.l    NULL
  1894. IText5:
  1895.     dc.b    1,3,RP_jam1,0
  1896.     dc.w    21+4,1+1
  1897.     dc.l    NULL
  1898.     dc.l    ITextText5
  1899.     dc.l    NULL
  1900. ITextText5:
  1901.     dc.b    ' «» EXIT «»',0
  1902. EVEN
  1903. Border:
  1904.     dc.w    0,0    ;XY origin relative to container TopLeft
  1905.     dc.b    1,0,RP_JAM1    ;front pen, back pen and drawmode
  1906.     dc.b    5    ;number of XY vectors
  1907.     dc.l    BorderVectors6    ;pointer to XY vectors
  1908.     dc.l    NULL    ;next border in list
  1909. BorderVectors6:
  1910.     dc.w    0,-1
  1911.     dc.w    199,-1
  1912.     dc.w    199,18
  1913.     dc.w    0,18
  1914.     dc.w    0,-1
  1915. EVEN
  1916. IntText:
  1917.     dc.b    1,0,RP_JAM2,0
  1918.     dc.w    17,115
  1919.     dc.l    NULL
  1920.     dc.l    NULL
  1921.     dc.l    NULL
  1922. IText11:
  1923.         dc.b    '    NO VIRUS FOUND    ',0
  1924. EVEN
  1925. VIR0
  1926.     dc.b    '    TRAVELING JACK    ',0
  1927. EVEN
  1928. VIR1
  1929.     dc.b    '    CENTURION LINK    ',0
  1930. EVEN
  1931. VIR2
  1932.     dc.b    '   DISASTER MASTER    ',0
  1933. EVEN
  1934. VIR3
  1935.     dc.b    '   XENO LINK VIRUS    ',0
  1936. EVEN
  1937. VIR4
  1938.     dc.b    '       REVENGE        ',0
  1939. EVEN
  1940. VIR5
  1941.     dc.b    '   REV. BOOTLOADER    ',0
  1942. EVEN
  1943. VIR6
  1944.     dc.b    '      MUTANT SCA      ',0
  1945. EVEN
  1946. VIR7
  1947.     dc.b    '     DISK  DOCTOR     ',0
  1948. EVEN
  1949. VIR8
  1950.     dc.b    '     BYTE WARRIOR     ',0
  1951. EVEN
  1952. VIR9
  1953.     dc.b    '     BSG 9  LINK      ',0
  1954. EVEN
  1955. VIR10
  1956.     dc.b    '     IRQ TEAM 41      ',0
  1957. EVEN
  1958. VIR11
  1959.     dc.b    '       GADAFFI        ',0
  1960. EVEN
  1961. VIR12
  1962.     dc.b    '       S  C  A        ',0
  1963. EVEN
  1964. VIR13
  1965.     dc.b    '     EXTERMINATOR     ',0
  1966. EVEN
  1967. VIR14
  1968.     dc.b    '     BYTE  BANDIT     ',0
  1969. EVEN
  1970.  
  1971.